package com.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;



/**
 * 手机端正则校验工具类
 * 
 *
 */
public class MobileValidateUtil {

    /**
     * 此类不能实例化
     */
    private MobileValidateUtil() {

    }
   

    /**
     * 验证手机号码（支持国际格式，+86135xxxx...（中国内地），+00852137xxxx...（中国香港））
     * 
     * @param cellphone
     *            移动、联通、电信运营商的号码段
     *            <p>
     *            移动的号段：134(0-8)、135、136、137、138、139、147（预计用于TD上网卡）
     *            、150、151、152、157（TD专用）、158、159、187（未启用）、188（TD专用）
     *            178
     *            </p>
     *            <p>
     *            联通的号段：130、131、132、155、156（世界风专用）、185（未启用）、186（3g）、
     *            176、175
     *            </p>
     *            <p>
     *            电信的号段：133、153、180（未启用）、189、177、173、177、173、149
     *            </p>
     * @return 验证成功返回true，验证失败返回false
     */
    public static boolean checkCellphone(String cellphone) {
        if (cellphone == null || "".equals(cellphone)) {
            return false;
        }
        String regex = "(\\+\\d+)?1[34578]\\d{9}$";
        return Pattern.matches(regex, cellphone);
    }

    /**
     * 判断字符串是否为合法手机号 11位 13 14 15 17 18开头
     * 
     * @param str
     * @return boolean
     */
    public static boolean isMobile(String str) {
        if (str == null || "".equals(str)) {
            return false;
        }
        return str.matches("^(13|14|15|17|18)\\d{9}$");
    }

    /**
     * 验证中文
     * 
     * @param chinese
     *            中文字符
     * @return 验证成功返回true，验证失败返回false
     */
    public static boolean checkChinese(String chinese) {
        String regex = "^[\u4E00-\u9FA5]+$";
        return Pattern.matches(regex, chinese);
    }

    /**
     * 验证交易密码
     * 
     * @param joParam
     * @param dcAccount
     */
    public static boolean checkPayPasswordRegex(String payPassword) {
        Pattern lengthPattern = Pattern.compile("^\\d{6}$");
        Matcher lengthMatcher = lengthPattern.matcher(payPassword);
        Pattern repeatPattern = Pattern.compile("^(\\d)(\\1{5})$");
        Matcher repeatMatcher = repeatPattern.matcher(payPassword);
        String temp1 = "01234567890";
        String temp2 = "09876543210";
        return lengthMatcher.matches() && !repeatMatcher.matches() && temp1.indexOf(payPassword) < 0
                && temp2.indexOf(payPassword) < 0;
    }

    /**
     * 校验登录密码
     * <p>
     * 同时包含字母和数字
     * </p>
     * 
     * @param password
     * @return
     */
    public static boolean checkLoginPasswordRegex(String password) {
        if (password == null || "".equals(password)) {
            return false;
        }
        if (password.length() < 6) {
            return false;
        }
        String regex = "^(?![a-zA-z]+$)(?!\\d+$)(?![!@#$%^&*]+$)[a-zA-Z\\d!@#$%^&*]+$";
        return Pattern.matches(regex, password);
    }


    /**
     * 校验是否是合法的金额数值
     * @param amount
     * @return
     */
    public static boolean checkMoney(String amount){
        if (amount == null || "".equals(amount)) {
            return false;
        }
        String regex = "^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$";
        return Pattern.matches(regex, amount);
    }
    
    /**
     * 校验是否是正整数
     * @param orginal
     * @return
     */
    public static boolean isPositiveInteger(String orginal) {
        if (orginal == null || "".equals(orginal)) {
            return false;
        }
        return Pattern.matches("^\\+{0,1}[1-9]\\d*", orginal);  
    }
    
    /**
     * 校验电子邮箱
     * @param email
     * @return
     */
    public static boolean checkEmail(String email){
        if( email == null || "".equals(email)){
            return false;
        }
        return Pattern.matches("^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$", email);
    }
}
